﻿#ifndef SLIDER_H
#define SLIDER_H

#include <QWidget>
#include <QColor>

class Slider : public QWidget {
    Q_OBJECT

public:
    explicit Slider(QWidget *parent = nullptr);

    // 设置前景色
    void setForegroundColor(const QColor &color);
    // 设置背景色
    void setBackgroundColor(const QColor &color);
    // 设置滑块颜色
    void setHandleColor(const QColor &color);
    // 设置圆角半径
    void setBorderRadius(int radius);
    // 设置字体颜色
    void setTextColor(const QColor &color);
    // 设置字体大小
    void setTextFontSize(int size);
    // 设置是否显示刻度
    void setTickMarksVisible(bool visible);
    // 设置数值范围
    void setRange(int min, int max);
    // 设置当前值
    void setValue(int value);
    // 获取当前值
    int value() const;

signals:
    void valueChanged(int value); // 值改变信号

protected:
    void paintEvent(QPaintEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
    void resizeEvent(QResizeEvent *event) override;

private:
    void updateValueFromMouse(const QPoint &pos);
    int valueToPosition(int value) const; // 将值转换为位置
    int positionToValue(int position) const; // 将位置转换为值

    QColor m_foregroundColor; // 前景色
    QColor m_backgroundColor; // 背景色
    QColor m_handleColor;     // 滑块颜色
    QColor m_textColor;       // 字体颜色
    int m_borderRadius;       // 圆角半径
    int m_textFontSize;       // 字体大小
    int m_minValue;           // 最小值
    int m_maxValue;           // 最大值
    int m_value;              // 当前值
    bool m_tickMarksVisible;  // 是否显示刻度
    QRect m_sliderHandleRect; // 滑块矩形区域
};

#endif // SLIDER_H
